package org.web.demo.listener;

import lombok.extern.slf4j.Slf4j;

import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.annotation.WebListener;

/**
 * @author yexi
 */
@WebListener
@Slf4j
public class CustomServletRequestAttributeListener implements ServletRequestAttributeListener {
    @Override
    public void attributeAdded(ServletRequestAttributeEvent srae) {
        // 任何一个Request对象中调用 setAttribute方法增加了数据都会触发该方法
        ServletRequest servletRequest = srae.getServletRequest();
        String name = srae.getName();
        Object value = srae.getValue();
        log.info("request" + servletRequest.hashCode() + "对象增加了数据:" + name + "=" + value);

    }

    @Override
    public void attributeRemoved(ServletRequestAttributeEvent srae) {
        // 任何一个Request对象中调用 removeAttribute方法移除了数据都会触发该方法
        ServletRequest servletRequest = srae.getServletRequest();
        String name = srae.getName();
        Object value = srae.getValue();
        log.info("request" + servletRequest.hashCode() + "对象删除了数据:" + name + "=" + value);
    }

    /**
     * 任何一个Request对象中调用 setAttribute方法修改了数据都会触发该方法
     *
     * @param srae
     */
    @Override
    public void attributeReplaced(ServletRequestAttributeEvent srae) {
        ServletRequest servletRequest = srae.getServletRequest();
        String name = srae.getName();
        Object value = srae.getValue();
        Object newValue = servletRequest.getAttribute(name);
        log.info("监听到{}将属性{}由{}修改为了{}", servletRequest, name, value, newValue);
    }
}
